package main

import (
	"bufio"
	"flag"
	"fmt"
	"io"
	"os"
)

func lineByLine(file string) error {
	var err error
	f, err := os.Open(file)
	if err != nil {
		return err
	}
	defer f.Close()
	//  bufio 包表示我们使用缓存区输入|| bufio.NewReader()创建一个新的读实例，
	r := bufio.NewReader(f)

	for {
		// 调用bufio.ReadString()逐行读取文件。
		// bufio.ReadString()参数指定，它指示bufio.ReadString()一直读取，直到碰到行分隔符为止。当参数是换行符时，不断调用bufio.ReadString()会逐行读取输入文件！注意，使用fmt.Print()而不是fmt.Println()输出读取行，说明每个输入行中都包含了换行符。
		line, err := r.ReadString('\n')
		if err == io.EOF {
			// 读取到了文件末尾
			break
		} else if err != nil {
			fmt.Printf("error reading file %s", err)
			break
		}
		fmt.Printf(line)
	}
	return nil
}

func main() {
	flag.Parse()
	if len(flag.Args()) == 0 {
		fmt.Printf("usage: byLine <file1> [<file2> ...] \n")
		return
	}

	fmt.Printf("%+v \n", flag.Args())

	for _, file := range flag.Args() {
		err := lineByLine(file)
		if err != nil {
			fmt.Println(err)
		}
	}
}
